/**
 * Projekt do předmetu GJA - LATEX TABLE CREATOR
 *
 * Soubor: CellSpan.java
 *
 * @author Ondřej Kubal  <xkluba00@stud.fit.vutbr.cz>
 * @author Petr Šimon    <xsimon10@stud.fit.vutbr.cz>
 */

package table;

/**
 * Interface spravující přístup nastavení sloučených buněk
 * (Data uložená v <code>AttributiveCellTableModel</code>)
 * (Implementace v <code>DefaultCellAttributeData</code>)
 *
 * Parametry sloučení
 * [1,1] -> nesloučená buňka. hodnota
 *          [1,x] říká, že další buňka se nachází hned na dalším řádku
 *          [x,1] říká, že další buňka se nachází hned na dalším sloupci
 *          -> jedná se tedy o buňku 1x1
 * Hodnoty větší jak jedna představují sloučenou buňku. Hodnota říká kolik sousedních buněk bylo sloučeno.
 * Hodnoty menší jak jedna značí, že se jedná o skrytou (neviditelnou) buňku.
 *          Pomocí těchto hodnot lze při náhodném přístupu pomocí dvou průchodů snadno zjistit pozici hlavní sloučené buňky.
 *          [0,x] -> hlavní buňka je na stejném řádku
 *          [-1,x] -> hlavní buňka je o řádek výše (atd.)
 *          Obdobně pro sloupce.
 * Nemůže nastat situace, že by se vyskytly buňky jednou hodnotou menší jak 1 a s jednou rovné 1 nebo vyšší- jednalo by se o nevalidní stav !!!
 */
public interface CellSpan
{
     /** Identifikátor řádku pro přístup k parametru sloučení */
     public final int ROW    = 0;
     /** Identifikátor sloupce pro přístup k parametru sloučení */
     public final int COLUMN = 1;
     
     /**
      * @param row řádek buňky
      * @param column sloupec buňky
      * @return Parametry sloučení dané buňky
     */
     public int[] getSpan(int row, int column);
     
     /**
      * Nastaví parametr sloučení dané buňky.
      * ! Nedoporučuje se používat. Raději použít <code>combine</code> nebo <code>split</code>.
      * @param span
      * @param row řádek buňky
      * @param column sloupec buňky
      */
     public void setSpan(int[] span, int row, int column);
     
     /**
      * Zjistí viditelnost buňky
      * @param row řádek buňky
      * @param column sloupec buňky
      * @return true pokud je viditelná, false pokud není viditelná
      */
     public boolean isVisible(int row, int column);
     
     /**
      * Zjistí, zda daná buňka je sloučená.
      * @param row řádek buňky
      * @param column sloupec buňky
      * @return true pokud je viditelná, false pokud není viditelná
      */
     public boolean isCombined(int row, int column);
     
     /**
      * Provede operaci sloučení daného výběru buňek.
      * Korektně spočítá hodnoty dle popsaného schéma.
      * @param rows vybrané řádky
      * @param columns vybrané sloupce
      * @return true, pokud lze dané buňky sloučit
      */
     public boolean combine(int[] rows, int[] columns);
     
     /**
     * Provede operaci rozdělení sloučené buňky
     * Korektně spočítá hodnoty dle popsaného schéma.
     * @param row řádek buňky
     * @param column sloupec buňky
     */
     public void split(int row, int column);
     
}
